package com.zan.queue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @Author Zan
 * @Create 2024/3/1 13:42
 * @Description :
 */
public class BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        // 创建阻塞队列
        // ArrayBlockingQueue(int capacity) 数组定长
        BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);

        // 第一组方法
//        System.out.println(blockingQueue.add("a"));
//        System.out.println(blockingQueue.add("b"));
//        System.out.println(blockingQueue.add("c"));
//        System.out.println(blockingQueue.element()); // element()方法获取队列的头

//        System.out.println(blockingQueue.add("d")); // 队列满了之后，在添加会抛出异常
//        System.out.println(blockingQueue.remove()); // remove取出元素
//        System.out.println(blockingQueue.remove());
//        System.out.println(blockingQueue.remove());
//        System.out.println(blockingQueue.remove()); // 当队列是空队列，再取数据会抛出异常

        // 第二组方法
//        System.out.println(blockingQueue.offer("a"));
//        System.out.println(blockingQueue.offer("b"));
//        System.out.println(blockingQueue.offer("c"));
//        System.out.println(blockingQueue.offer("www")); // 队列满了之后，在添加返回的仍是特殊值true false
//
//        System.out.println(blockingQueue.poll());
//        System.out.println(blockingQueue.poll());
//        System.out.println(blockingQueue.poll());
//        System.out.println(blockingQueue.poll()); // 当队列是空队列，再取数据会返回null

        // 第三组方法
//        blockingQueue.put("a");
//        blockingQueue.put("b");
//        blockingQueue.put("c");
////        blockingQueue.put("w"); // 队列满了之后，在添加会阻塞
//
//        System.out.println(blockingQueue.take());
//        System.out.println(blockingQueue.take());
//        System.out.println(blockingQueue.take());
//        System.out.println(blockingQueue.take()); // 当队列是空队列，再取数据会阻塞

        // 第四组方法
        System.out.println(blockingQueue.offer("a"));
        System.out.println(blockingQueue.offer("b"));
        System.out.println(blockingQueue.offer("c"));
        System.out.println(blockingQueue.offer("w", 3L, TimeUnit.SECONDS)); // 会阻塞一段时间，如果还是满的，那就会自动退出结束
    }
}
